我正在使用的ios库系列之Mantle


<!–markdown–>#什么是Mantle
Mantle是由于Github团队开发的,目的是去除Objective-C把JSON数据转为NSObject子类的所有样板代码。Mantle也能做数据转换,通过一种神奇的方式把JSON原始数据(strings, ints, floats)转换为复杂数据,比如NSDate, NSURL, 甚至是自定义类。

#Github地址
https://github.com/Mantle/Mantle

#令人(我)兴奋的功能

1.绑定JSON(dict,class)数据

<p><!–more–></p>
只要在model类里实现 JSONKeyPathsByPropertyKey.你就可以实现将model类里的属性与JSON或dict里的任意路径的节点绑定,如下代码

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
             @&#34;date&#34;: @&#34;dt&#34;,
             @&#34;windSpeed&#34;: @&#34;wind.speed&#34;,
             };
}

2.JSON数据的转换

想像一下,服务端返回给我们一串图片url,我们只需要实现一个公式,Mantle就会自动将url转换成uiimage.

以后,我们使用 这个model类的时候就只要 model.image就可以得到一个uiimage图片,是不是很酷?实现代码如下

方法名约定为 + (NSValueTransformer *)属性名JSONTransformer
然后调用MTLValueTransformer ,实现双向转换即可

  + (NSValueTransformer *)iconJSONTransformer {
    return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *value) {
        return [UIimage initWithURl:value];
    } reverseBlock:^(UIImage *img) {
        return [uiimage geturl];
    }];
}

或者,直接实现单向转换

+ (NSValueTransformer *)JSONTransformerForKey:(NSString *)key {
    if ([key isEqualToString:@&#34;createdAt&#34;]) {
        return [NSValueTransformer valueTransformerForName:XYDateValueTransformerName];
    }

    return nil;
}

3.classForParsingJSONDictionary
从json,dictionry解析出class?没用过。。。官方API
If you are implementing a class cluster, implement this optional method to determine which subclass of your base class should be used when deserializing an object from JSON.
这是从json中确定哪个子类?

+ (Class)classForParsingJSONDictionary:(NSDictionary *)JSONDictionary {
    if (JSONDictionary[@&#34;image_url&#34;] != nil) {
        return XYPictureMessage.class;
    }

    if (JSONDictionary[@&#34;body&#34;] != nil) {
        return XYTextMessage.class;
    }

    NSAssert(NO, @&#34;No matching class for the JSON dictionary &#39;%@&#39;.&#34;, JSONDictionary);
    return self;
}